#ifndef __DEFINITION__
#define __DEFINITION__

#include <wiringPi.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>

#define TEST 22    // 测试引脚
#define RELAY_0 1  // 继电器_0
#define RELAY_1 4  // 继电器_1
#define RELAY_2 5  // 继电器_2
#define RELAY_3 6  // 继电器_3
#define RELAY_4 26 // 继电器_4
#define RELAY_5 27 // 继电器_5
#define RELAY_6 28 // 继电器_6
#define RELAY_7 29 // 继电器_7

#define INFRARED_0 22    // 红外检测_0
#define INFRARED_1 23    // 红外检测_1
#define WATER_LEVEL_0 2  // 水位检测_0
#define WATER_LEVEL_1 3  // 水位检测_1
#define WATER_LEVEL_2 21 // 水位检测_2

#define PUMP_CMD '1' //传给qgc的数据类型，1为水质采集反馈的数据

#define GRAYSCALE_TIME_OUT 50 //灰度传感器超时时间，单位秒
#define BUCKET_TIME_OUT 400   //水位传感器超时时间， 600*300=180秒

#define WITHIN_REMOVE_PIMP_WATER 5  //内排水
#define OUTSIDE_REMOVE_PIMP_WATER 6 //外排水

#define WITHIN_REMOVE_PIMP_WATER_TIME 6  //内排水时间
#define OUTSIDE_REMOVE_PIMP_WATER_TIME 6 //外排水时间

typedef enum _wxt_msg_id
{
    START_PUMP_WATER = 100,    //开始抽水
    START_PUMP_SUCC,           //开始成功
    START_PUMP_FAIL,           //开始失败
    HALF_WATER_START,          //0.5m 抽水开始
    HALF_WATER_FINISH,         //0.5m 抽水结束
    ONE_WATER_START,           //1m 抽水开始
    ONE_WATER_FINISH,          //1m 抽水结束
    ONEHALF_WATER_START,       //1.5m 抽水开始
    ONEHALF_WATER_FINISH,      //1.5m 抽水结束
    PUMP_WATER_FINISH,         //硬件设备回收完成
    STOP_PUMP_WATERB,          //停止抽水
    STOP_PUMP_SUCC,            //停止成功
    STOP_PUMP_FAIL,            //停止失败
    DECLINE_HALF_TIMEOUT,      //水管下降到0.5米超时
    DECLINE_ONE_TIMEOUT,       //水管下降到1米超时
    DECLINE_ONEHALF_TIMEOUT,   //水管下降到1.5米超时
    HALF_WATER_TIMEOUT,        //0.5m 抽水超时
    ONE_WATER_TIMEOUT,         //1m 抽水超时
    ONEHALF_WATER_TIMEOUT,     //1.5m 抽水超时
    PUMP_WATER_FINISH_TIMEOUT, //硬件设备回收超时
    RECOVERY_PIPE_FINISH,      //回收完成RESET_PUMP_FAIL信号响应成功
    RESET_PUMP_STSTEM,         //抽水重置信号
    RESET_PUMP_SUCCESS,        //抽水重置成功
    RESET_PUMP_FAIL,           //抽水重置失败
} WXT_MSG_ID;

pthread_t water_sampling_id;                                  //水采样线程id
typedef void (*pump_system_feedbdack)(WXT_MSG_ID, int, char); //回调函数
#endif